package com.example.sys.ai.dto;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.core.utils.StringUtils;
import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/***
 * 天眼查查询公司信息
 */
@Data
public class Company implements Serializable {

    public static final String REASON = "reason";

    public static final String RESULT = "result";

    public static final String OK = "ok";

    public static final String ITEMS = "items";

    //数据id
    private String id;

    //公司名
    private String name;

    //显示名称
    private String label;

    //城市
    private String city;

    //法人
    private String legal;

    //简称
    private String alias;

    //公司类型
    private String companyOrgType;

    //注册地
    private String regLocation;

    //统一社会信用代码
    private String creditCode;

    //状态
    private String regStatus;

    //注册机构
    private String regInstitute;

    //业务类型
    private String businessScope;

    /***
     * 转成对象返回
     * @param json
     * @return
     */
    public static Company toCompany(String json) {
        Company company = new Company();
        if (StringUtils.isNotEmpty(json)) {
            JSONObject object = JSONObject.parseObject(json);
            if (object.containsKey(REASON) && object.getString(REASON).equalsIgnoreCase(OK)) {
                JSONObject jsonObject = object.getJSONObject(RESULT);

                //编码
                if (jsonObject.containsKey("id") && StringUtils.isNotEmpty(jsonObject.getString("id"))) {
                    company.setId(jsonObject.getString("id"));
                }

                //公司名
                if (jsonObject.containsKey("name") && StringUtils.isNotEmpty(jsonObject.getString("name"))) {
                    company.setName(jsonObject.getString("name"));
                }

                //公司名
                if (jsonObject.containsKey("name") && StringUtils.isNotEmpty(jsonObject.getString("name"))) {
                    company.setLabel(jsonObject.getString("name"));
                }

                //城市
                if (jsonObject.containsKey("city") && StringUtils.isNotEmpty(jsonObject.getString("city"))) {
                    company.setCity(jsonObject.getString("city"));
                }

                //法人
                if (jsonObject.containsKey("legalPersonName") && StringUtils.isNotEmpty(jsonObject.getString("legalPersonName"))) {
                    company.setLegal(jsonObject.getString("legalPersonName"));
                }

                //简称
                if (jsonObject.containsKey("alias") && StringUtils.isNotEmpty(jsonObject.getString("alias"))) {
                    company.setAlias(jsonObject.getString("alias"));
                }

                //公司类型
                if (jsonObject.containsKey("companyOrgType") && StringUtils.isNotEmpty(jsonObject.getString("companyOrgType"))) {
                    company.setCompanyOrgType(jsonObject.getString("companyOrgType"));
                }

                //注册地
                if (jsonObject.containsKey("regLocation") && StringUtils.isNotEmpty(jsonObject.getString("regLocation"))) {
                    company.setRegLocation(jsonObject.getString("regLocation"));
                }

                //统一社会信用代码
                if (jsonObject.containsKey("creditCode") && StringUtils.isNotEmpty(jsonObject.getString("creditCode"))) {
                    company.setCreditCode(jsonObject.getString("creditCode"));
                }

                //状态
                if (jsonObject.containsKey("regStatus") && StringUtils.isNotEmpty(jsonObject.getString("regStatus"))) {
                    company.setRegStatus(jsonObject.getString("regStatus"));
                }

                //注册机构
                if (jsonObject.containsKey("regInstitute") && StringUtils.isNotEmpty(jsonObject.getString("regInstitute"))) {
                    company.setRegInstitute(jsonObject.getString("regInstitute"));
                }

                //业务类型
                if (jsonObject.containsKey("businessScope") && StringUtils.isNotEmpty(jsonObject.getString("businessScope"))) {
                    company.setBusinessScope(jsonObject.getString("businessScope"));
                }
            }
        }
        return company;
    }

    /**
     * 公司列表封装
     *
     * @param json
     * @return
     */
    public static List<Company> toCompanyList(String json) {
        List<Company> list = new ArrayList<>();
        if (StringUtils.isNotEmpty(json)) {
            JSONObject jsonObject = JSONObject.parseObject(json);
            if (jsonObject.containsKey(REASON) && jsonObject.getString(REASON).equalsIgnoreCase(OK)) {
                jsonObject = jsonObject.getJSONObject(RESULT);
                if (jsonObject != null && jsonObject.containsKey(ITEMS)) {
                    JSONArray itemsArray = jsonObject.getJSONArray(ITEMS);
                    for (int i = 0; i < itemsArray.size(); i++) {
                        JSONObject item = itemsArray.getJSONObject(i);

                        Company company = new Company();

                        //编码
                        if (item.containsKey("id") && StringUtils.isNotEmpty(item.getString("id"))) {
                            company.setId(item.getString("id"));
                        }

                        //公司名
                        if (item.containsKey("name") && StringUtils.isNotEmpty(item.getString("name"))) {
                            company.setName(item.getString("name"));
                        }

                        //公司名
                        if (item.containsKey("name") && StringUtils.isNotEmpty(item.getString("name"))) {
                            company.setLabel(item.getString("name"));
                        }

                        //城市
                        if (item.containsKey("city") && StringUtils.isNotEmpty(item.getString("city"))) {
                            company.setCity(item.getString("base"));
                        }

                        //法人
                        if (item.containsKey("legalPersonName") && StringUtils.isNotEmpty(item.getString("legalPersonName"))) {
                            company.setLegal(item.getString("legalPersonName"));
                        }

                        //简称
                        if (item.containsKey("alias") && StringUtils.isNotEmpty(item.getString("alias"))) {
                            company.setAlias(item.getString("alias"));
                        }

                        //公司类型
                        if (item.containsKey("companyOrgType") && StringUtils.isNotEmpty(item.getString("companyOrgType"))) {
                            company.setCompanyOrgType(item.getString("companyOrgType"));
                        }

                        //注册地
                        if (item.containsKey("regLocation") && StringUtils.isNotEmpty(item.getString("regLocation"))) {
                            company.setRegLocation(item.getString("regLocation"));
                        }

                        //统一社会信用代码
                        if (item.containsKey("creditCode") && StringUtils.isNotEmpty(item.getString("creditCode"))) {
                            company.setCreditCode(item.getString("creditCode"));
                        }

                        //状态
                        if (item.containsKey("regStatus") && StringUtils.isNotEmpty(item.getString("regStatus"))) {
                            company.setRegStatus(item.getString("regStatus"));
                        }

                        //注册机构
                        if (item.containsKey("regInstitute") && StringUtils.isNotEmpty(item.getString("regInstitute"))) {
                            company.setRegInstitute(item.getString("regInstitute"));
                        }

                        //业务类型
                        if (item.containsKey("businessScope") && StringUtils.isNotEmpty(item.getString("businessScope"))) {
                            company.setBusinessScope(item.getString("businessScope"));
                        }

                        list.add(company);
                    }
                }
            }
        }
        return list;
    }
}
